package com.helin.helinhealth.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 用户实体类
 * 
 * <p>
 * 该实体类对应数据库中的 user 表，用于存储用户基本信息，
 * 包括微信openid、昵称、头像等。是系统中最基础的实体类，
 * 其他实体（如老人、子女）通过外键与之关联。
 * </p>
 */
@Data
@TableName("user")
@Schema(description = "用户表")
public class User {
    /**
     * 用户ID
     */
    @TableField("id")
    private Long id;
    
    /**
     * 微信openid，作为用户的唯一标识
     */
    @TableId("openid")
    @Schema(description = "微信openid")
    private String openid;
    
    /**
     * 微信昵称
     */
    @TableField("nickname")
    @Schema(description = "微信昵称")
    private String nickname;
    
    /**
     * 头像URL
     */
    @TableField("avatar")
    @Schema(description = "头像URL")
    private String avatar;
    
    /**
     * 紧急联系电话
     */
    @TableField("phone")
    @Schema(description = "紧急联系电话")
    private String phone;
    
    /**
     * 用户角色：1-老人，2-子女
     */
    @TableField("role")
    @Schema(description = "用户角色：1-老人 2-子女")
    private Integer role;
    
    /**
     * 性别：0-女，1-男
     */
    @TableField("gender")
    @Schema(description = "性别：0-女 1-男")
    private Integer gender;
    
    /**
     * 省份
     */
    @TableField("province")
    @Schema(description = "省份")
    private String province;
    
    /**
     * 城市
     */
    @TableField("city")
    @Schema(description = "城市")
    private String city;
    
    /**
     * 国家
     */
    @TableField("country")
    @Schema(description = "国家")
    private String country;
    
    /**
     * 语言
     */
    @TableField("language")
    @Schema(description = "语言")
    private String language;
    
    /**
     * 创建时间
     */
    @TableField("create_time")
    @Schema(description = "创建时间")
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @TableField("update_time")
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;
    
    /**
     * 逻辑删除标记：0-未删除，1-已删除
     */
    @TableField("is_deleted")
    @TableLogic
    @Schema(description = "逻辑删除标记")
    private Integer isDeleted;
}
